package com.openfarmanager.android.core.network.datasource;
import android.os.Handler;
import android.util.Pair;
import com.dropbox.client2.DropboxAPI;
import com.openfarmanager.android.App;
import com.openfarmanager.android.filesystem.DropboxFile;
import com.openfarmanager.android.filesystem.FileProxy;
import com.openfarmanager.android.filesystem.FileSystemScanner;
import com.openfarmanager.android.fragments.NetworkPanel;
import com.openfarmanager.android.model.NetworkEnum;
import com.openfarmanager.android.model.exeptions.NetworkException;
import com.openfarmanager.android.utils.Extensions;
import com.openfarmanager.android.utils.FileUtilsExt;
import java.util.ArrayList;
import java.util.List;
import static com.openfarmanager.android.fragments.NetworkPanel.MSG_NETWORK_HIDE_PROGRESS;
import static com.openfarmanager.android.fragments.NetworkPanel.MSG_NETWORK_OPEN;
import static com.openfarmanager.android.fragments.NetworkPanel.MSG_NETWORK_SHOW_PROGRESS;
/**
* @author Vlad Namashko
*/
public class DropboxDataSource extends RawPathDataSource {
public DropboxDataSource(Handler handler) {
mHandler = handler;
}
public String getNetworkType() {
return "Dropbox";
}
@Override
public NetworkEnum getNetworkTypeEnum() {
return NetworkEnum.Dropbox;
}
public NetworkPanel.DirectoryScanInfo openDirectory(FileProxy directory) {
List<FileProxy> files = new ArrayList<FileProxy>();
DropboxAPI.Entry currentNode;
try {
currentNode = App.sInstance.getDropboxApi().metadata(directory.getFullPath(), -1, null, true, null);
for (DropboxAPI.Entry entry : currentNode.contents) {
files.add(new DropboxFile(entry));
}
FileSystemScanner.sInstance.sort(files);
} catch (Exception e) {
throw NetworkException.handleNetworkException(e);
}
return mDirectoryScanInfo.set(files, FileUtilsExt.getParentPath(directory.getParentPath()));
}
public void onUnlinkedAccount() {
App.sInstance.getDropboxApi().deleteCurrentAccount();
}
@Override
public void exitFromNetwork() {
}
@Override
public boolean isSearchSupported() {
return true;
}
@Override
public boolean isChangeEncodingSupported() {
return false;
}
@Override
public void open(final FileProxy file) {
mHandler.sendEmptyMessage(MSG_NETWORK_SHOW_PROGRESS);
Extensions.runAsync(new Runnable() {
@Override
public void run() {
try {
mHandler.sendMessage(mHandler.obtainMessage(MSG_NETWORK_OPEN,
new Pair<FileProxy, String>(file, App.sInstance.getDropboxApi().media(file.getFullPath(), false).url)));
} catch (Exception e) {
mHandler.sendEmptyMessage(MSG_NETWORK_HIDE_PROGRESS);
}
}
});
}
public FileProxy createFakeDirectory(String path) {
return new DropboxFile(path);
}
}